package process

import (
	"encoding/json"
	"fmt"
	clientmodel "helloword01/31chatroom/client/model"
	commonmodel "helloword01/31chatroom/common/model"
	"helloword01/31chatroom/common/utils"
	"io"
	"net"
	"os"
)

func showMenu() {
	fmt.Println("-------------------------欢迎登录聊天系统-------------------------")
	fmt.Println("\t\t\t1. 显示在线用户列表")
	fmt.Println("\t\t\t2. 群发信息")
	fmt.Println("\t\t\t3. 发送私信")
	fmt.Println("\t\t\t4. 信息列表")
	fmt.Println("\t\t\t5. 退出系统")
	fmt.Println("\t\t\t 请选择(1~5)")
	smsProcess := &SmsProcess{}

	var key int
	fmt.Scanf("%d\n", &key)
	switch key {
	case 0:
		fmt.Println()
	case 1:
		printOnlineUser()
	case 2:
		fmt.Println("请输入你的群发消息：")
		var content string
		fmt.Scanf("%s", &content)
		smsProcess.SendGroupMes(content)
	case 3:
		fmt.Println("请输入消息，格式为:[1]xxxxx")
		var content string
		fmt.Scanf("%s", &content)
		smsProcess.SendPrivateMes(content)
	case 4:
		fmt.Println("信息列表")
		printOnlineUserInfo()
	case 5:
		fmt.Println("退出系统")
		smsProcess.SendLogoutMes()
		removeUserFromOnlineUser(clientmodel.CUR_USER.UserId)
		os.Exit(0)
	default:
		fmt.Println(commonmodel.InputError)
	}
}

// serverProcessMes 登录成功后，启动一个协程，保持客户端与服务端的通讯，保持监听
//
//	@Description:
//	@param conn
func serverProcessMes(conn net.Conn) {
	tf := &utils.Transfer{
		Conn: conn,
	}
	for {
		//1.登录成功后，读取服务端的消息~
		mes, err := tf.ReadPkg()
		if err != nil {
			if err == io.EOF {
				fmt.Println("服务端断开~")
			} else {
				fmt.Println("服务端断开: err=", err)
			}
			return
		}
		//2.根据消息类型进行处理
		switch mes.Type {
		case commonmodel.NotifyUserStatusMesType: //其他用户上线通知
			var notifyUserStatusMes commonmodel.NotifyUserStatusMes
			err = json.Unmarshal([]byte(mes.Data), &notifyUserStatusMes)
			updateUserStatus(&notifyUserStatusMes)
		case commonmodel.SmsMesType: //发送的群消息
			outPutGroupMes(&mes)
		case commonmodel.SmsPrivateMesType:
			outPutPrivateMes(&mes)
		case commonmodel.LogoutMesType:
			outPutLogoutMes(&mes)
		default:
			fmt.Println("服务器接收到客户端的消息=", mes)
		}
	}
}
